

//安装  jsonwebtoken    cnpm i jsonwebtoken -S
//token    令牌    校验是否是有效的访问者
//token  是后端生成  加密生成  返回给前端
//前端 要把token 存储本地 sessionStorage
//每次sjax 前端要把token 返回给后端
//后端 先要判断token是否有效准确
//无效不准确就不允许访问


var jwt = require("jsonwebtoken")

var secret = "wuhan2004-daydayup";   //密钥

// var data = {      //需要加密的字段
//     username: "why",
//     password: "wanghaoyu"
// }

var createToken = function (data) {              //时间
    return jwt.sign(data, secret, { expiresIn: "2h" });
}

// var createToken = function () {              //时间
//     return jwt.sign(data, secret, { expiresIn: "2h" });
// }

exports.createToken = createToken;



// token  解密
var decodeToken = function (token) {
    return new Promise(function (resolve, reject) {
        jwt.verify(token, secret, (err, data) => {
            if (err) {
                reject(err)
            } else {
                console.log(data);    //解密后的明文
                resolve(data)
            }
        })
    })
}

//检测token是否有效
//1，token不存在
//2，token过期
//3，token不正确

var checkToken = function (req, res, callback) {
    var token = req.headers.token;    //接收前端发来的token 进行判断
    if (token) {
        decodeToken(token)
            .then(data => {
                console.log(data);
                callback(data)    //解密成功的回调
            })
            .catch(err => {
                console.log(err);
                res.json({
                    code: 3200,
                    msg: "token无效，请立即登录",
                    type: 0,
                    err,
                })
            })
    } else {
        res.json({
            code: 3200,
            msg: "token不存在，请立即登录",
            type: 0
        })
    }
}

exports.checkToken = checkToken


